// 快速排序是对冒泡排序的一种改进（升级版）
// 

#include<stdio.h>

int a[11]={0,5,1,9,6,7,19,11,3,8,4};   //定义全局变量，以便在递归函数中调用 

int arr[] = {1,3,0};

void exchange(int *p,int *q){
	int temp=*p;
	*p=*q;
	*q=temp;
}              //定义交换函数

// [0 3 2] test
int quicksort(int left,int right){
	if(left>=right){
		return 0;                      //递归出口 
	}                                 
	
	int l_left,l_right,temp;            //temp为基准 i，j分别为左侧和右侧移动的标志
	temp=a[left];
	l_left =left;
	l_right=right;
	
	//移动函数
	while(l_left != l_right){
		while(l_left < l_right && a[l_right]>=temp){
			l_right--;
		}
		exchange(&a[l_left],&a[l_right]);                   //交换到另一侧的值，一定小于或者大于轴值 

        while(l_left<l_right && a[l_left]<=temp){
        	l_left++;                                     //二层while循环里加上i<j防止越界 
		}		
		exchange(&a[l_left],&a[l_right]);
	}
	
	
        //递归部分
	quicksort(l_left+1,right);
	quicksort(left,l_right-1); 
	 
} 

int main()
{
	quicksort(1,(sizeof(arr)/sizeof(arr[0])-1));
	for(int i = 0;i<sizeof(arr)/sizeof(arr[0]);i++){
		printf("%d ",arr[i]);
	}
}